#ifndef POINT_SET_H
#define POINT_SET_H

#include <stdio.h>
#include <stdlib.h>
#include "uthash.h"

// 定义结构体表示集合中的一个元素
typedef struct {
    unsigned int id;  // 这个点的ID
    UT_hash_handle hh;  // 由uthash库提供的哈希处理句柄
} Point;

// 添加一个点到集合
void add_point(Point **set, unsigned int id) {
    Point *p;

    // 检查点是否已经在集合中
    HASH_FIND_INT(*set, &id, p);
    if (p == NULL) {
        // 如果不在集合中，添加这个点
        p = (Point *)malloc(sizeof(Point));
        p->id = id;
        HASH_ADD_INT(*set, id, p);
    }
}

// 检查一个点是否已经访问过
int is_visited(Point *set, unsigned int id) {
    Point *p;
    HASH_FIND_INT(set, &id, p);
    return p != NULL;
}

// 释放集合内存
void free_set(Point *set) {
    Point *current_point, *tmp;
    HASH_ITER(hh, set, current_point, tmp) {
        HASH_DEL(set, current_point);
        free(current_point);
    }
}

#endif